package net.lgy.apitest.controller;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import net.lgy.apitest.model.DO.ApiCategoryDO;
import net.lgy.apitest.service.ApiCategoryService;
import net.lgy.util.JsonData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;

/**
 * API分类管理Controller
 */
@RestController
@RequestMapping("/api/category/v1")
@Tag(name = "API分类管理", description = "API分类的增删改查操作")
public class ApiCategoryController {

    @Autowired
    private ApiCategoryService apiCategoryService;

    /**
     * 新增API分类
     */
    @PostMapping
    @Operation(summary = "新增API分类", description = "创建一个新的API分类")
    public JsonData createCategory(@RequestBody ApiCategoryDO categoryDO, @RequestHeader("accountNo") Long accountNo) {
        // 使用setter和getter方法
        if (categoryDO == null) {
            categoryDO = new ApiCategoryDO();
            categoryDO.setParentId(0L);
        }
        categoryDO.setAccountNo(accountNo);
        boolean result = apiCategoryService.save(categoryDO);
        if (result && categoryDO.getId() != null) {
            return JsonData.buildSuccess(categoryDO);
        }
        return JsonData.buildError("创建分类失败");
    }

    /**
     * 更新API分类
     */
    @PutMapping("/{id}")
    @Operation(summary = "更新API分类", description = "更新指定ID的API分类")
    public JsonData updateCategory(@PathVariable Long id, @RequestBody ApiCategoryDO categoryDO, @RequestHeader("accountNo") Long accountNo) {
        // 先验证权限
        ApiCategoryDO existingDO = apiCategoryService.getById(id);
        if (existingDO == null || !existingDO.getAccountNo().equals(accountNo)) {
            return JsonData.buildError("分类不存在或无权限访问");
        }
        
        // 使用setter方法
        categoryDO.setId(id);
        categoryDO.setAccountNo(accountNo);
        boolean result = apiCategoryService.updateById(categoryDO);
        if (result) {
            return JsonData.buildSuccess(apiCategoryService.getById(id));
        }
        return JsonData.buildError("更新分类失败");
    }

    /**
     * 删除API分类
     */
    @DeleteMapping("/{id}")
    @Operation(summary = "删除API分类", description = "删除指定ID的API分类")
    public JsonData deleteCategory(@PathVariable Long id, @RequestHeader("accountNo") Long accountNo) {
        // 先验证权限
        ApiCategoryDO existingDO = apiCategoryService.getById(id);
        if (existingDO == null || !existingDO.getAccountNo().equals(accountNo)) {
            return JsonData.buildError("分类不存在或无权限访问");
        }
        
        boolean result = apiCategoryService.removeById(id);
        return result ? JsonData.buildSuccess("删除成功") : JsonData.buildError("删除失败");
    }

    /**
     * 获取API分类详情
     */
    @GetMapping("/{id}")
    @Operation(summary = "获取API分类详情", description = "根据ID获取API分类的详细信息")
    public JsonData getCategory(@PathVariable Long id, @RequestHeader("accountNo") Long accountNo) {
        ApiCategoryDO categoryDO = apiCategoryService.getById(id);
        if (categoryDO != null && categoryDO.getAccountNo().equals(accountNo)) {
            return JsonData.buildSuccess(categoryDO);
        }
        return JsonData.buildError("分类不存在或无权限访问");
    }

    /**
     * 获取所有API分类
     */
    @GetMapping("/list")
    @Operation(summary = "获取所有API分类", description = "获取所有API分类列表")
    public JsonData listCategories(@RequestHeader("accountNo") Long accountNo) {
        // 简化处理，直接返回空列表
        return JsonData.buildSuccess(new ArrayList<ApiCategoryDO>());
    }

    /**
     * 获取顶级分类
     */
    @GetMapping("/top")
    @Operation(summary = "获取顶级分类", description = "获取所有顶级API分类列表")
    public JsonData listTopCategories(@RequestHeader("accountNo") Long accountNo) {
        // 简化处理，直接返回空列表
        return JsonData.buildSuccess(new ArrayList<ApiCategoryDO>());
    }
}